Section Code

                                  L'interpolation Bi Linaire,
                    Une ptite explication des formules pour la bi-interpolation lineaire...


t'as donc 4 valeurs (v1,v2,v3,v4) que tu veux interpoler dans un carr de 8*8


                                              v1--------v2
                                              |          |
                                              |          |
                                              |   +      |
                                              |  v(x,y)  |
                                              |          |
                                              |          |
                                              v3--------v4

la formule classique pour la biinterpolation est:

v(x,y)=(1-x)(1-y)*v1+x(1-y)*v2+(1-x)y*v3+xy*v4, avec 0<=x<1 et 0<=y<1

d'ou en l'appliquant aux entiers sur du 8*8:

v(x,y)=[(8-x)(8-y)*v1+x(8-y)*v2+(8-x)y*v3+xy*v4]/64 , avec 0<=x<8 et 0<=y<8


And Now, les gradiants...
Les gradiants sont des drives mais partielles... donc des drives partielles...
C'est le meme mecanisme que pour les drives par rapport  x (f '(x)=df(x)/dx) sauf qu'elles s'appliquent  toutes
les variables (x,y,z,...)

Je vais donc dfinir plusieurs gradiants (2 d'abord): dv(x,y)/dx et dv(x,y)/dy ...
pour calculer la premiere, je dis dans ma tete que c'est x qui varie, par contre y est constant... et y'a qu' driver
comme d'hab
pour calculer la deuxieme, je dis dans ma tete que c'est y qui varie, par contre x est constant... et y'a qu' driver
comme d'hab... okay ?

d'ou:

dv(x,y)/dx=[-(8-y)*v1+(8-y)*v2-y*v3+y*v4]/64
et
dv(x,y)/dy=[-(8-x)*v1-x*v2+(8-x)*v3+x*v4]/64

Ce qui est important de remarquer ici c'est que dv/dx n'est pas constant, il dpend de y, ce qui signifie qu'il faut le
faire varier quand y varie ( chaque dbut de ligne donc)

d'ou le petit calcul de la variation de d[dv(x,y)/dx]/dy (soit en plus matheux: dv(x,y)/dxdy...)

dv(x,y)/dxdy=[v1-v2-v3+v4]/64

Voila maintenant le remplissage de la mappe:

qq variables plus explicatives:

dleftv=dv(x=0,y)/dy=(-v1+v3)/8
dvdxdy=dv/dxdy

algo:

   v=v1
   leftv=v1
   dvdx=dv(x,y=0)=(-u1+u2)/8

   pour y de 0  7

      v=leftv

      pour x de 0  7

         ici on a la valeur de v en (x,y)

         v=v+dvdx
      next x

      leftv=leftv+dleftv
      dvdx=dvdx+dvdxdy !!!! trs important ceci ;)
   next y


C'est bien beau tout a, mais  quoi a sert-il donc ?

   une rponse simple :bah pour faire des effets bi-linairement interpols bien sr !
 _ les effets 2d o les calculs sont trs lourds, a rduit de 64 leur nombre (pour du bi-linaire 8*8)
 _ le RayCasting est un exemple d'effet 2d (oui bon faut un peu le trafficoter) pour lequel a marche bien (cf les
 tunnels qui bougent et tournent dans tous les sens, les plans, et mme les rendu temps rel de
 boules+ombre+lumire (avec un gros flou par dessus pour gommer les ptits bugs))
 _ tiens on lit le mot bi-lineaire depuis tout  l'heure... bah pour le bilinear mapping a marche aussi (les valeurs 
 interpoler sont les nuances de Rouge, Vert, Bleu)
 _ et avec un peu d'imagination plein d'autres trucs (les light maps, les shadow maps, pour eviter l'effet de marche
 d'escalier d au zoom), etc etc




vala, j'y vais, peut tre d'autres zarticles un de ces 4 ...

 plous !

Cyg / BLaBLa.